module jinji.post.model;

import jinji.common.model,
jinji.config,
jinji.user.model;

/// 帖子
@snakeCase
struct Post {
@notnull:
	/// 帖子ID
	@serial Id id;
	/// BLAKE3哈希
	@unique @check!"length(hash)=32"@type("Uint8Array") Hash hash;
	/// 标签串
	@defEmpty Tags tags;
	mixin timeInfo;
}

/// 帖子可见性
@snakeCase
struct PostVisibility {
@notnull:
	/// 帖子id
	@PK @FK!(Post.id) Id id;
	mixin Visibility;
}

/// 帖子访问量
@snakeCase
struct PostView {
@notnull:
	/// 帖子id
	@PK @FK!(Post.id) Id id;
	/// 访问量
	long views;
	/// 最近访问量
	@default0 long recent_views;
}

/// 锁定帖子
@snakeCase
struct LockedPost {
@notnull:
	@serial Id id;
	/// 帖子ID
	@FK!(Post.id) Id pid;
	/// 描述
	@defEmpty @descT Desc desc;
	mixin timeInfo;
	alias start = created_at;
	alias end = updated_at;
}

/// 变更请求
@snakeCase
struct ChangeRequest {
@notnull:
	/// 变更请求ID
	@serial Id id;
	/// 标题
	@nameT Name title;
	/// 描述
	@defEmpty @descT Desc desc;
	/// 状态
	@check!("status", CRStatus) CRStatus status;
	/// 帖子id
	@FK!(Post.id) Id pid;
	/// 标签串
	Tags tags;
	/// 操作者
	@default0 Id operator;
	mixin timeInfo;
}

/// 分类器
@snakeCase
@noRowid struct Classifier {
@notnull:
	/// 名称
	@PK @nameT Name name;
	/// 命令行
	@sqltype("varchar(8191)") Desc cmd;
	/// 描述
	@defEmpty @descT Desc desc;
	/// 是否自动运行
	bool autorun;
	/// 使用的UID
	@FK!(User.id) Id uid;
	/// 下一个待运行的帖子id
	Id pid;
	mixin timeInfo;
}

/+
/// 图像信息
@snakeCase
struct Image {
@notnull:
	@serial @nonPacked Id id;
	/// BLAKE3哈希
	@unique @check!"length(hash)=32"@type("Uint8Array") Hash hash;
	/// 宽度
	int width;
	/// 高度
	int height;
	/// 格式
	int format;
}
+/
